// Copyright 2010, Vanya Davidenko.
// Используемая кодировка: UTF-8.

#ifndef LIBV_UNCOPYABLE_H_
#define LIBV_UNCOPYABLE_H_


namespace libv
{

/** Класс, унаследовав который, к производному классу запрещается
  * применять конструктор копирования и оператор присваивания.
  * Так как метод не содержит public методов, не важно какое из 3 типов
  * наследования будет использоваться: в любом случае пользователю будут
  * не доступны операции копирования, а производному классу останется
  * возможность вызывать конструктор. */
class Uncopyable
{
  protected:
    /** Разрешение конструирования производных классов. */
    Uncopyable() {}

    /** Разрешение уничтожения производных классов. */
    ~Uncopyable() {}

  private:
    /** Запрет копирования производных классов. */
    Uncopyable(const Uncopyable&);

    /** Запрет присваивания производных классов. */
    Uncopyable& operator=(const Uncopyable&);
};

}  // libv

#endif  // LIBV_UNCOPYABLE_H_
